package concurrency;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.BiFunction;
import java.util.stream.Collectors;

/**
 * 本类意在学习BiFunction这个函数式接口，具体的在Collectors.toMap()中会使用到。需要好好了解。
 */
public class FunctionalApply {
    public static void main(String[] args) {

        // 用来统计每个字母出现的次数
        // 延伸应用场景：用来统计每个货物清单中每个货物出现了几次。可以到时重写一下货物的equal方法。来进行key值的生成。
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("a");
        list.add("c");
        list.add("d");

        // 等价代换1
        Map<String, Integer> map1 = list.stream().collect(Collectors.toMap(k -> k, v -> 2, Integer::sum));

        // 等价代换2
        Map<String, Integer> map2 = new HashMap<>();
        for (String s : list) {
            map2.merge(s, 1, new BiFunction<Integer, Integer, Integer>() {
                @Override
                public Integer apply(Integer integer, Integer integer2) {
                    return null;
                }
            });
        }
        System.out.println(map1);
    }
}
